package edu.northwestern.cbits.purple_robot_manager.tests; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import junit.framework.Assert; import org.json.JSONException; import org.json.JSONObject; import android.content.Context; import edu.northwestern.cbits.purple_robot_manager.R; import edu.northwestern.cbits.purple_robot_manager.scripting.BaseScriptEngine; import edu.northwestern.cbits.purple_robot_manager.triggers.DateTrigger; import edu.northwestern.cbits.purple_robot_manager.triggers.Trigger; import edu.northwestern.cbits.purple_robot_manager.triggers.TriggerManager; public class HalfHourDateTriggerTestCase extends RobotTestCase { public HalfHourDateTriggerTestCase(Context context, int priority) { super(context, priority); } public void test() { if (this.isSelected(this._context) == false) return; TriggerManager triggers = TriggerManager.getInstance(this._context); this.broadcastUpdate("Clearing triggers..."); triggers.removeAllTriggers(); Assert.assertEquals("HHDT0", 0, triggers.allTriggers().size()); String triggerId = "half-hour-date-test"; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss"); long now = System.currentTimeMillis(); try { JSONObject triggerDef = new JSONObject(); triggerDef.put("type", "datetime"); triggerDef.put(Trigger.NAME, "Half Hour Date Test"); triggerDef.put(Trigger.IDENTIFIER, triggerId); triggerDef .put(Trigger.ACTION, "PurpleRobot.playDefaultTone(); PurpleRobot.testLog('Date Test: Half Hour Fired!'); PurpleRobot.vibrate('SOS');"); triggerDef.put(DateTrigger.DATETIME_START, sdf.format(new Date(now + (30 * 60 * 1000)))); String script = "PurpleRobot.updateTrigger('" + triggerId + "', " + triggerDef.toString().replace("'", "\\'").replace("\"", "'") + ");"; BaseScriptEngine.runScript(this._context, script); this.broadcastUpdate("Created half-hour trigger."); Thread.sleep(2000); } catch (JSONException e) { Assert.fail("HHDT1"); } catch (InterruptedException e) { Assert.fail("HHDT2"); } this.broadcastUpdate("Verifying half-hour trigger exists..."); List<Trigger> allTriggers = triggers.allTriggers(); Assert.assertEquals("HHDT3", 1, allTriggers.size()); Trigger trigger = allTriggers.get(0); Assert.assertEquals("HHDT4", triggerId, trigger.identifier()); Assert.assertEquals("HHDT5", trigger.getClass(), DateTrigger.class); DateTrigger dateTrigger = (DateTrigger) trigger; Assert.assertTrue("HHDT6", dateTrigger.matches(this._context, new Date(now + (30 * 60 * 1000) + 15000))); List<Long> upcomingTimes = triggers.upcomingFireTimes(this._context); Assert.assertTrue("HHDT7", upcomingTimes.size() > 0); try { long wait = (31 * 60 * 1000); while (wait > 0) { this.broadcastUpdate("Sleeping. " + (wait / (60 * 1000)) + " minutes remaining...", 0); Thread.sleep(60 * 1000); wait = wait - 60 * 1000; } } catch (InterruptedException e) { Assert.fail(); } this.broadcastUpdate("Verifying that half-hour trigger fired..."); Assert.assertTrue("HHDT8", dateTrigger.lastFireTime(this._context) > 0); Assert.assertTrue("HHDT9", dateTrigger.lastFireTime(this._context) < System.currentTimeMillis()); this.broadcastUpdate("Clearing triggers..."); triggers.removeAllTriggers(); } public int estimatedMinutes() { return 33; } public String name(Context context) { return context.getString(R.string.name_half_hour_date_trigger_test); } }